package pacoteAutomato;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Vector;
import pacoteScanner.Scanner;

/*
 * To change this template] choose Tools | Templates
 * and open the template in the editor.
 */


public class Automato {

    private int vetorAscii[];
    private Estado tabela [][];
    private Scanner scanner;
    private char caracter;
    private String vetorErros[];
    private String vetorReservadas[]={"algoritmo","caracter","constantes","enquanto","entao","escreva","falso",
                                       "funcao","inteiro","leia","logico","para","principal","real","registro",
                                       "retorno","se","senao","tipo","variaveis","vazio","verdadeiro"};

    public enum Estado {
        INICIO,SUB,NUM,IDENT,DIV,OU,E,MENOR,MAIOR,ATRIB,ADIC,EXCL,MULT,
        PONTVIRG,ABREPARENT,FECHAPARENT,
        ABRECHAVE,FECHACHAVE,ABRECOLCH,FECHACOLCH,PONTACESSO,NPONTO,
        COMENTL,COMENTB,MENORIG,MAIORIG,DIF,IGUALD,INCREMEN,NUMDECIM,PFIM,OR,CONSOME,AND,DECREMEN,ERRO,NUM_NUM, VIRGULA,FRASE,FIMFRASE,FIM,FIMTEXTO, ERROFIM;
    }



    public Automato() {
        scanner = Scanner.getScanner();
        caracter = scanner.nextChar();//inicializa com o primeiro caracter do primeiro token

        inicializaVetorAscii();
        inicializatabelaTransicao();
        inicializaVetorErros();

        
    }

    public Palavra proximoToken(){
    Estado estado = Estado.INICIO;
    Estado estadoAnterior = Estado.INICIO;
    String lexema = new String();

    boolean erro=false;
    Erro objErro = null;



    while(true){
    boolean consome=false;

    		switch(estado){
                    case INICIO :
                        estadoAnterior = estado;
                        estado = tabela[estado.INICIO.ordinal()][vetorAscii[caracter]];
                        break;
                    case SUB :
                        estadoAnterior = estado;
                        estado = tabela[estado.SUB.ordinal()][vetorAscii[caracter]];
                        break;
                    case NUM :
                        estadoAnterior = estado;
                        estado = tabela[estado.NUM.ordinal()][vetorAscii[caracter]];
                        break;
                    case NPONTO :
                        estadoAnterior = estado;
                        estado = tabela[estado.NPONTO.ordinal()][vetorAscii[caracter]];
                        break;
                    case NUMDECIM :
                        estadoAnterior = estado;
                        estado = tabela[estado.NUMDECIM.ordinal()][vetorAscii[caracter]];
                        break;
                    case IDENT :
                        estadoAnterior = estado;
                        estado = tabela[estado.IDENT.ordinal()][vetorAscii[caracter]];
                        break;
                    case DIV :
                        estadoAnterior = estado;
                        estado = tabela[estado.DIV.ordinal()][vetorAscii[caracter]];
                        break;
                    case OU :
                        estadoAnterior = estado;
                        estado = tabela[estado.OU.ordinal()][vetorAscii[caracter]];
                        break;
                    case OR :
                        estadoAnterior = estado;
                        estado = tabela[estado.OR.ordinal()][vetorAscii[caracter]];
                        break;
                    case E :
                        estadoAnterior = estado;
                        estado = tabela[estado.E.ordinal()][vetorAscii[caracter]];
                        break;
                    case AND :
                        estadoAnterior = estado;
                        estado = tabela[estado.AND.ordinal()][vetorAscii[caracter]];
                        break;
                    case MENOR :
                        estadoAnterior = estado;
                        estado = tabela[estado.MENOR.ordinal()][vetorAscii[caracter]];
                        break;
                    case MAIOR :
                        estadoAnterior = estado;
                        estado = tabela[estado.MAIOR.ordinal()][vetorAscii[caracter]];
                        break;
                    case ATRIB :
                        estadoAnterior = estado;
                        estado = tabela[estado.ATRIB.ordinal()][vetorAscii[caracter]];
                        break;
                    case ADIC :
                        estadoAnterior = estado;
                        estado = tabela[estado.ADIC.ordinal()][vetorAscii[caracter]];
                        break;
                    case EXCL :
                        estadoAnterior = estado;
                        estado = tabela[estado.EXCL.ordinal()][vetorAscii[caracter]];
                        break;
                    case MULT :
                        estadoAnterior = estado;
                        estado = tabela[estado.MULT.ordinal()][vetorAscii[caracter]];
                        break;
                    case PONTVIRG :
                        estadoAnterior = estado;
                        estado = tabela[estado.PONTVIRG.ordinal()][vetorAscii[caracter]];
                        break;
                    case ABREPARENT :
                        estadoAnterior = estado;
                        estado = tabela[estado.ABREPARENT.ordinal()][vetorAscii[caracter]];
                        break;
                    case FECHAPARENT :
                        estadoAnterior = estado;
                        estado = tabela[estado.FECHAPARENT.ordinal()][vetorAscii[caracter]];
                        break;
                    case ABRECHAVE :
                        estadoAnterior = estado;
                        estado = tabela[estado.ABRECHAVE.ordinal()][vetorAscii[caracter]];
                        break;
                    case FECHACHAVE :
                        estadoAnterior = estado;
                        estado = tabela[estado.FECHACHAVE.ordinal()][vetorAscii[caracter]];
                        break;
                    case ABRECOLCH :
                        estadoAnterior = estado;
                        estado = tabela[estado.ABRECOLCH.ordinal()][vetorAscii[caracter]];
                        break;
                    case FECHACOLCH :
                        estadoAnterior = estado;
                        estado = tabela[estado.FECHACOLCH.ordinal()][vetorAscii[caracter]];
                        break;
                    case PONTACESSO :
                        estadoAnterior = estado;
                        estado = tabela[estado.PONTACESSO.ordinal()][vetorAscii[caracter]];
                        break;
                    case COMENTL :
                        estadoAnterior = estado;
                        estado = tabela[estado.COMENTL.ordinal()][vetorAscii[caracter]];
                        break;
                    case COMENTB :
                        estadoAnterior = estado;
                        estado = tabela[estado.COMENTB.ordinal()][vetorAscii[caracter]];
                        break;
                    case MENORIG :
                        estadoAnterior = estado;
                        estado = tabela[estado.MENORIG.ordinal()][vetorAscii[caracter]];
                        break;
                    case MAIORIG :
                        estadoAnterior = estado;
                        estado = tabela[estado.MAIORIG.ordinal()][vetorAscii[caracter]];
                        break;
                    case DIF :
                        estadoAnterior = estado;
                        estado = tabela[estado.DIF.ordinal()][vetorAscii[caracter]];
                        break;
                    case IGUALD :
                        estadoAnterior = estado;
                        estado = tabela[estado.IGUALD.ordinal()][vetorAscii[caracter]];
                        break;
                    case INCREMEN:
                        estadoAnterior = estado;
                        estado = tabela[estado.INCREMEN.ordinal()][vetorAscii[caracter]];
                        break;
                    case DECREMEN :
                        estadoAnterior = estado;
                        estado = tabela[estado.DECREMEN.ordinal()][vetorAscii[caracter]];
                        break;

                    case NUM_NUM:
                        estadoAnterior = estado;
                        estado = tabela[estado.NUM_NUM.ordinal()][vetorAscii[caracter]];
                        break;

                    case VIRGULA:
                        estadoAnterior = estado;
                        estado = tabela[estado.VIRGULA.ordinal()][vetorAscii[caracter]];
                        break;

                    case FRASE:
                        estadoAnterior = estado;
                        estado = tabela[estado.FRASE.ordinal()][vetorAscii[caracter]];
                        break;

                    case FIMFRASE:
                        estadoAnterior = estado;
                        estado = tabela[estado.FIMFRASE.ordinal()][vetorAscii[caracter]];
                        break;

                    case PFIM :
                        estadoAnterior = estado;
                        estado = tabela[estado.PFIM.ordinal()][vetorAscii[caracter]];
                        break;
                    case FIM :
                        if(erro){
                           objErro.setPalavraErrada(lexema);
                           return objErro;
                        }
                        else{
                            Token token = null;
                            if(estadoAnterior == Estado.IDENT){
                                //verificação se é palavra reservada ou não
                                if(Arrays.binarySearch(vetorReservadas, lexema) < 0){
                                    //verificação se o tamanho do identificador é permitido ou não
                                    if(lexema.length() <=32){
                                        token = new Token(estadoAnterior.toString(), lexema);//caso a palavra realmente seja um identificador
                                    }
                                    else{
                                        Erro erroId = new Erro("Tamanho inválido do Identificador", lexema, scanner.getLinhaAtual());
                                        return erroId;
                                    }
                                }
                                else{
                                    token = new Token("Palavra Reservada",lexema);//caso o lexema seja uma palavra reservada
                                }
                            }
                            //verificação do tamnho do número
                            else if(estadoAnterior == Estado.NUM || estadoAnterior == Estado.NUMDECIM){
                                if(lexema.length() <=32){
                                        token = new Token(estadoAnterior.toString(), lexema);//caso a palavra realmente seja um identificador
                                }
                                else{
                                        Erro erroId = new Erro("Tamanho inválido do Número", lexema, scanner.getLinhaAtual());
                                        return erroId;
                                }
                            }
                            else{
                                token = new Token(estadoAnterior.toString(), lexema);//caso a palavra realmente seja um identificador
                            }

                            return token;
                        }

                    case ERRO:
                        if(!erro){
                            erro=true;
                            objErro=new Erro();
                            objErro.setTipoErro(vetorErros[estadoAnterior.ordinal()]);
                            objErro.setLinhaErro(scanner.getLinhaAtual());
                        }
                        estadoAnterior = estado;
                        estado = tabela[estado.ERRO.ordinal()][vetorAscii[caracter]];
                        break;

                    //ERRO que não consome nenhum outro caracter
                    case ERROFIM:
                        objErro = new Erro();
                        objErro.setPalavraErrada(lexema);
                        objErro.setTipoErro(vetorErros[estadoAnterior.ordinal()]);
                        objErro.setLinhaErro(scanner.getLinhaAtual());
                        return objErro;

                    case FIMTEXTO:
                        Token tokenFim = new Token("Fim", lexema);
                        return tokenFim;

                    case CONSOME:
                        estado = Estado.INICIO;
                        estadoAnterior = Estado.INICIO;
                        consome = true;
                        break;


                    default:
                        System.out.println("ERRO");
                        break;
                }
            //condições em que não pode ser concatenado o caracter
            if(!consome && estado != Estado.FIM && estado!=Estado.CONSOME && estado!=Estado.ERROFIM || estadoAnterior==Estado.PFIM){
                lexema += String.valueOf(caracter);//concatena o ultimo caracter lido
            }
            //estados em que não pode consumir o proximo caracter
            if(estado != Estado.FIM && estado!=Estado.FIMTEXTO && estado !=Estado.CONSOME && estado!=Estado.ERROFIM || estadoAnterior==Estado.PFIM){
                caracter = scanner.nextChar();//ler no final para qnd nao for consumir o caracter
                                             // ele será o carater do inicio
            }
            //System.out.println(lexema);

//            estadoAnterior = estado;
//            System.out.println(estado.ordinal());
//            System.out.println(vetorAscii[caracter]);
//            estado = tabela[estado.ordinal()][vetorAscii[caracter]];

    }

}

    //retorna a linha atual
    public int getLinha(){
        return scanner.getLinhaAtual();
    }

    public void inicializaVetorAscii(){
        vetorAscii = new int[256];

        for (int i = 0; i < vetorAscii.length; i++) {//inicializa todo o vetor com o retorno de erro pois todos os valores não mapeados são erro.
            vetorAscii[i] = 24;
        }
        for (int i = 48; i <= 57; i++) {//inicializando posições referentes aos dígitos
            vetorAscii[i] = 1;
        }
        for (int i = 65; i <= 90; i++) {//inicializando posições referentes às letras maiúsculas
            vetorAscii[i] = 0;
        }
        for (int i = 97; i <= 122; i++) {//inicializando posições referentes às letras minúsculas
            vetorAscii[i] = 0;
        }

        vetorAscii[43] = 2;// +
        vetorAscii[45] = 3;// -
        vetorAscii[47] = 4;// /
        vetorAscii[42] = 5;// *
        vetorAscii[61] = 6;// =
        vetorAscii[33] = 7;// !
        vetorAscii[62] = 8;// >
        vetorAscii[60] = 9;// <
        vetorAscii[38] = 10;// &
        vetorAscii[124] = 11;// |
        vetorAscii[46] = 12;// .
        vetorAscii[59] = 13;// ;
        vetorAscii[40] = 14;// (
        vetorAscii[41] = 15;// )
        vetorAscii[123] = 16;// {
        vetorAscii[125] = 17;// }
        vetorAscii[91] = 18;// [
        vetorAscii[93] = 19;// ]
        vetorAscii[32] = 20;// " "
        vetorAscii[10] = 21;// \r
        vetorAscii[13] = 21;// \n
        vetorAscii[10] = 21;// \r vai ser tratado como um \n
        vetorAscii[9] = 22;// \t
        vetorAscii[95] = 23;// _
        vetorAscii[4] = 25;//"EOT"
        vetorAscii[44] = 26;// ,
        vetorAscii[34] = 27;//"
    }

    public void inicializatabelaTransicao(){
        int linhas = 40;
        int colunas = 28;
        tabela = new Estado [linhas][colunas];

        for(int l=0;l<linhas;l++){
            for(int c=0;c<colunas;c++){
                tabela[l][c]= Estado.FIM;
            }
        }

        //linha 0 - INICIO
        tabela[0][0] =Estado.IDENT; tabela[0][1] = Estado.NUM; tabela[0][2] = Estado.ADIC; tabela[0][3] = Estado.SUB; tabela[0][4] = Estado.DIV; tabela[0][5] = Estado.MULT; tabela[0][6] = Estado.ATRIB; tabela[0][7] = Estado.EXCL; tabela[0][8] = Estado.MAIOR; tabela[0][9] = Estado.MENOR; tabela[0][10] = Estado.E; tabela[0][11] = Estado.OU; tabela[0][12] = Estado.PONTACESSO; tabela[0][13] = Estado.PONTVIRG; tabela[0][14] = Estado.ABREPARENT; tabela[0][15] = Estado.FECHAPARENT; tabela[0][16] = Estado.ABRECHAVE; tabela[0][17] = Estado.FECHACHAVE; tabela[0][18] = Estado.ABRECOLCH; tabela[0][19] = Estado.FECHACOLCH; tabela[0][20] = Estado.CONSOME; tabela[0][21] = Estado.CONSOME; tabela[0][22] = Estado.CONSOME; tabela[0][23] = Estado.ERRO; tabela[0][24] = Estado.ERRO; tabela[0][25] = Estado.FIMTEXTO; tabela[0][26] = Estado.VIRGULA; tabela[0][27] = Estado.FRASE;

        //linha 1 - SUB.
        tabela[1][1] = Estado.NUM; tabela[1][3] = Estado.DECREMEN;  tabela[1][24] = Estado.ERRO;

        //linha 2 - NUM.
        tabela[2][0] = Estado.ERRO; tabela[2][1] = Estado.NUM;  tabela[2][12] = Estado.NUMDECIM;  tabela[2][24] = Estado.ERRO;

        //linha 3 -IDENT.
        tabela[3][0] =Estado.IDENT; tabela[3][1] = Estado.IDENT; tabela[3][23] = Estado.IDENT; tabela[3][24] = Estado.ERRO;

        //linha 4 - DIV
        tabela[4][4] = Estado.COMENTL; tabela[4][5] = Estado.COMENTB;  tabela[4][24] = Estado.ERRO;

        //linha 5 -
        for(int c=0;c<colunas;c++){
            tabela[5][c] = Estado.ERROFIM;
        }

        tabela[5][11] = Estado.OR;
        //--------------------------------------------

        //linha 6
        for(int c=0;c<colunas;c++){
            tabela[6][c] = Estado.ERROFIM;
        }

        tabela[6][10] = Estado.AND;
        //--------------------------------------------

        //linha 7
        tabela[7][6] = Estado.MENORIG; tabela[7][24] = Estado.ERRO;

        //linha 8
        tabela[8][6] = Estado.MAIORIG; tabela[8][24] = Estado.ERRO;

        //linha 9
        tabela[9][6] = Estado.IGUALD;  tabela[9][24] = Estado.ERRO;

        //linha 10
        tabela[10][2] = Estado.INCREMEN; tabela[10][24] = Estado.ERRO;

        //linha 11
        for(int c=0;c<colunas;c++){
            tabela[11][c] = Estado.ERROFIM;
        }

        tabela[11][6] = Estado.DIF;
        //--------------------------------------------

        //linha 12
        tabela[12][24] = Estado.ERRO;

        //linha 13 Tudo FIM

        //linha 14 Tudo FIM

        //linha 15 Tudo FIM

        //linha 16 Tudo FIM

        //linha 17 Tudo FIM

        //linha 18 Tudo FIM

        //linha 19 Tudo FIM

        //linha 20 Tudo FIM

        //linha 21
        for(int c=0;c<colunas;c++){
            tabela[21][c] = Estado.ERRO;
        }
        tabela[21][1] = Estado.NUMDECIM; tabela[21][13] = Estado.FIM; tabela[21][14] = Estado.FIM; tabela[21][15] = Estado.FIM; tabela[21][16] = Estado.FIM; tabela[22][17] = Estado.FIM; tabela[21][18] = Estado.FIM; tabela[21][19] = Estado.FIM; tabela[21][20] = Estado.FIM; tabela[21][21] = Estado.FIM; tabela[21][22] = Estado.FIM; tabela[21][25] = Estado.FIM;

        //linha 22
        for(int c=0;c<colunas;c++){
            tabela[22][c] = Estado.COMENTL;
        }
        tabela[22][21] =Estado.FIM;  tabela[22][25] =Estado.FIM;

        //linha 23
        for(int c=0;c<colunas;c++){
            tabela[23][c] = Estado.COMENTB;
        }
        tabela[23][5] =Estado.PFIM;  tabela[23][25] =Estado.ERROFIM;

        //linha 24
        tabela[24][24] = Estado.ERRO;

        //linha 25
        tabela[25][24] = Estado.ERRO;

        //linha 26
        tabela[26][24] = Estado.ERRO;

        //linha 27
        tabela[27][24] = Estado.ERRO;

        //linha 28
        tabela[28][24] = Estado.ERRO;

       //linha 29 - NUM.DECIM
        for(int i=0;i<colunas;i++){

            tabela[29][i] = Estado.FIM;
        }
        tabela[29][1] = Estado.NUM_NUM; tabela[29][20] = Estado.ERROFIM; tabela[29][21] = Estado.ERROFIM; tabela[29][22] = Estado.ERROFIM; tabela[29][25] = Estado.ERROFIM;

        //linha 30
        for(int c=0;c<colunas;c++){
            tabela[30][c] = Estado.COMENTB;
        }
        tabela[30][4] = Estado.FIM; tabela[30][5] = Estado.PFIM;

        //linha 31 - OR


        //linha 32 CONSOME já é atribuido INICIO diretamente no CASE

        //linha 33 - AND


        //linha 34 DECREMET
        tabela[34][24] = Estado.ERRO;

        //linha 35 ERRO
        for(int i=0;i<=12;i++){
            tabela[35][i] = Estado.ERRO;
        }

        for(int i=13;i<=22;i++){
            tabela[35][i] = Estado.FIM;
        }
        tabela[35][23] = Estado.ERRO; tabela[35][24] = Estado.ERRO; tabela[35][25] = Estado.FIM;

        //linha 36 - NUM.NUM
         for(int i=0;i<colunas;i++){
            tabela[36][i] = Estado.FIM;
        }
        tabela[36][0] = Estado.ERRO; tabela[36][1] = Estado.NUM_NUM; tabela[36][23] = Estado.ERRO; tabela[36][24] = Estado.ERRO;

        //linha 37 - Virgula
        

        //linha 38 - Frase
        for(int i = 0;i<colunas;i++){
            tabela[38][i] = Estado.FRASE;
        }
        tabela[38][25] = Estado.ERRO; tabela[38][27] = Estado.FIMFRASE;

        //linha 39 - FIMFRASE
        for(int i = 0;i<colunas;i++){
            tabela[39][i] = Estado.FIM;
        }

//        tabela[0][0] = Estado.IDENT;  tabela[0][1] = Estado.NUM;      tabela[0][2] = Estado.ADIC;    tabela[0][3] = Estado.SUB;    tabela[0][4] = Estado.DIV;      tabela[0][5] = Estado.MULT;        tabela[0][6] = Estado.ATRIB;        tabela[0][7] = Estado.EXCL;        tabela[0][8] = Estado.MAIOR;        tabela[0][9] = Estado.MENOR;        tabela[0][10] = Estado.E;        tabela[0][11] = Estado.OU;        tabela[0][12] = Estado.PONTACESSO ;        tabela[0][13]= Estado.PONTVIRG;        tabela[0][14] = Estado.ABREPARENT;        tabela[0][15] = Estado.FECHAPARENT;        tabela[0][16] = Estado.ABREPARENT;        tabela[0][17] = Estado.ABRECHAVE;        tabela[0][18] = Estado.FECHACHAVE;        tabela[0][19] = Estado.ABRECOLCH;        tabela[0][20] = Estado.FECHACOLCH;        tabela[0][21] = Estado.FIM;        tabela[0][22] =Estado.FIM;        tabela[0][23] = Estado.ERRO;        tabela[0][24] = Estado.ERRO;
//        tabela[1][0] = Estado.FIM;  tabela[1][1] = Estado.NUM;      tabela[1][2] = Estado.FIM;    tabela[1][3] = Estado.DECREMEN;    tabela[1][4] = Estado.FIM;      tabela[1][5] = Estado.FIM;        tabela[1][6] = Estado.FIM;        tabela[1][7] = Estado.FIM;        tabela[1][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[1][10] = Estado.FIM;        tabela[1][11] = Estado.FIM;        tabela[1][12] = Estado.FIM;        tabela[1][13]= Estado.FIM;        tabela[1][14] = Estado.FIM;        tabela[1][15] = Estado.FIM;        tabela[1][16] = Estado.FIM;        tabela[1][17] = Estado.FIM;        tabela[1][18] = Estado.FIM;        tabela[1][19] = Estado.FIM;        tabela[1][20] = Estado.FIM;        tabela[1][21] = Estado.FIM;        tabela[1][22] = Estado.FIM;        tabela[1][23] = Estado.FIM;        tabela[1][24] = Estado.ERRO;
//        tabela[2][0] = Estado.FIM;  tabela[2][1] = Estado.NUM;      tabela[2][2] = Estado.FIM;    tabela[2][3] = Estado.FIM;    tabela[2][4] = Estado.FIM;      tabela[2][5] = Estado.FIM;        tabela[2][6] = Estado.FIM;        tabela[2][7] = Estado.FIM;        tabela[2][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[2][10] = Estado.FIM;        tabela[2][11] = Estado.FIM;        tabela[2][12] = Estado.NPONTO;        tabela[2][13]= Estado.FIM;        tabela[2][14] = Estado.FIM;        tabela[2][15] = Estado.FIM;        tabela[2][16] = Estado.FIM;        tabela[2][17] = Estado.FIM;        tabela[2][18] = Estado.FIM;        tabela[2][19] = Estado.FIM;        tabela[2][20] = Estado.FIM;        tabela[2][21] = Estado.FIM;        tabela[2][22] = Estado.FIM;        tabela[2][23] = Estado.FIM;        tabela[2][24] = Estado.ERRO;
//        tabela[3][0] = Estado.ERRO;  tabela[3][1] = Estado.NUMDECIM;      tabela[3][2] = Estado.ERRO;    tabela[3][3] = Estado.ERRO;    tabela[3][4] = Estado.ERRO;      tabela[3][5] = Estado.ERRO;        tabela[3][6] = Estado.ERRO;        tabela[3][7] = Estado.ERRO;        tabela[3][8] = Estado.ERRO;        tabela[3][9] = Estado.ERRO;        tabela[3][10] = Estado.ERRO;        tabela[3][11] = Estado.ERRO;        tabela[3][12] = Estado.ERRO;        tabela[3][13]= Estado.ERRO;        tabela[3][14] = Estado.ERRO;        tabela[3][15] = Estado.ERRO;        tabela[3][16] = Estado.ERRO;        tabela[3][17] = Estado.ERRO;        tabela[3][18] = Estado.ERRO;        tabela[3][19] = Estado.ERRO;        tabela[3][20] = Estado.ERRO;        tabela[3][21] = Estado.ERRO;        tabela[3][22] = Estado.ERRO;        tabela[3][23] = Estado.FIM;        tabela[3][24] = Estado.ERRO;
//        tabela[4][0] = Estado.FIM;  tabela[4][1] = Estado.NUMDECIM;      tabela[4][2] = Estado.FIM;    tabela[4][3] = Estado.FIM;    tabela[4][4] = Estado.FIM;      tabela[4][5] = Estado.FIM;        tabela[4][6] = Estado.FIM;        tabela[4][7] = Estado.FIM;        tabela[4][8] = Estado.FIM;        tabela[4][9] = Estado.FIM;        tabela[4][10] = Estado.FIM;        tabela[4][11] = Estado.FIM;        tabela[4][12] = Estado.FIM;        tabela[4][13]= Estado.FIM;        tabela[4][14] = Estado.FIM;        tabela[4][15] = Estado.FIM;        tabela[4][16] = Estado.FIM;        tabela[4][17] = Estado.FIM;        tabela[4][18] = Estado.FIM;        tabela[4][19] = Estado.FIM;        tabela[4][20] = Estado.FIM;        tabela[4][21] = Estado.FIM;        tabela[4][22] = Estado.FIM;        tabela[4][23] = Estado.FIM;        tabela[4][24] = Estado.ERRO;
//        tabela[5][0] = Estado.IDENT;  tabela[5][1] = Estado.IDENT;      tabela[5][2] = Estado.FIM;    tabela[5][3] = Estado.FIM;    tabela[5][4] = Estado.FIM;      tabela[5][5] = Estado.FIM;        tabela[5][6] = Estado.FIM;        tabela[5][7] = Estado.FIM;        tabela[5][8] = Estado.FIM;        tabela[5][9] = Estado.FIM;        tabela[5][10] = Estado.FIM;        tabela[5][11] = Estado.FIM;        tabela[5][12] = Estado.FIM;        tabela[5][13]= Estado.FIM;        tabela[5][14] = Estado.FIM;        tabela[5][15] = Estado.FIM;        tabela[5][16] = Estado.FIM;        tabela[5][17] = Estado.FIM;        tabela[5][18] = Estado.FIM;        tabela[5][19] = Estado.FIM;        tabela[5][20] = Estado.FIM;        tabela[5][21] = Estado.FIM;        tabela[5][22] = Estado.FIM;        tabela[5][23] = Estado.IDENT;        tabela[5][24] = Estado.ERRO;
//        tabela[6][0] = Estado.FIM;  tabela[6][1] = Estado.FIM;      tabela[6][2] = Estado.FIM;    tabela[6][3] = Estado.FIM;    tabela[6][4] = Estado.COMENTL;      tabela[6][5] = Estado.COMENTB;        tabela[6][6] = Estado.FIM;        tabela[6][7] = Estado.FIM;        tabela[6][8] = Estado.FIM;        tabela[6][9] = Estado.FIM;        tabela[6][10] = Estado.FIM;        tabela[6][11] = Estado.FIM;        tabela[6][12] = Estado.FIM;        tabela[6][13]= Estado.FIM;        tabela[6][14] = Estado.FIM;        tabela[6][15] = Estado.FIM;        tabela[6][16] = Estado.FIM;        tabela[6][17] = Estado.FIM;        tabela[6][18] = Estado.FIM;        tabela[6][19] = Estado.FIM;        tabela[6][20] = Estado.FIM;        tabela[6][21] = Estado.FIM;        tabela[6][22] = Estado.FIM;        tabela[6][23] = Estado.FIM;        tabela[6][24] = Estado.ERRO;
//        tabela[7][0] = Estado.ERRO;  tabela[7][1] = Estado.ERRO;      tabela[7][2] = Estado.ERRO;    tabela[7][3] = Estado.ERRO;    tabela[7][4] = Estado.ERRO;      tabela[7][5] = Estado.ERRO;        tabela[7][6] = Estado.ERRO;        tabela[7][7] = Estado.ERRO;        tabela[7][8] = Estado.ERRO;        tabela[7][9] = Estado.ERRO;        tabela[7][10] = Estado.ERRO;        tabela[7][11] = Estado.OR;        tabela[7][12] = Estado.ERRO;        tabela[7][13]= Estado.ERRO;        tabela[7][14] = Estado.ERRO;        tabela[7][15] = Estado.ERRO;        tabela[7][16] = Estado.ERRO;        tabela[7][17] = Estado.ERRO;        tabela[7][18] = Estado.ERRO;        tabela[7][19] = Estado.ERRO;        tabela[7][20] = Estado.ERRO;        tabela[7][21] = Estado.ERRO;        tabela[7][22] = Estado.ERRO;        tabela[7][23] = Estado.ERRO;        tabela[7][24] = Estado.ERRO;
//        tabela[8][0] = Estado.FIM;  tabela[8][1] = Estado.FIM;      tabela[8][2] = Estado.FIM;    tabela[8][3] = Estado.FIM;    tabela[8][4] = Estado.FIM;      tabela[8][5] = Estado.FIM;        tabela[8][6] = Estado.FIM;        tabela[8][7] = Estado.FIM;        tabela[8][8] = Estado.FIM;        tabela[8][9] = Estado.FIM;        tabela[8][10] = Estado.FIM;        tabela[8][11] = Estado.FIM;        tabela[8][12] = Estado.FIM;        tabela[8][13]= Estado.FIM;        tabela[8][14] = Estado.FIM;        tabela[8][15] = Estado.FIM;        tabela[8][16] = Estado.FIM;        tabela[8][17] = Estado.FIM;        tabela[8][18] = Estado.FIM;        tabela[8][19] = Estado.FIM;        tabela[8][20] = Estado.FIM;        tabela[8][21] = Estado.FIM;        tabela[8][22] = Estado.FIM;        tabela[8][23] = Estado.FIM;        tabela[8][24] = Estado.ERRO;
//        tabela[9][0] = Estado.ERRO;  tabela[9][1] = Estado.ERRO;      tabela[9][2] = Estado.ERRO;    tabela[9][3] = Estado.ERRO;    tabela[9][4] = Estado.ERRO;      tabela[9][5] = Estado.ERRO;        tabela[9][6] = Estado.ERRO;        tabela[9][7] = Estado.ERRO;        tabela[9][8] = Estado.ERRO;        tabela[9][9] = Estado.ERRO;        tabela[9][10] = Estado.AND;        tabela[9][11] = Estado.ERRO;        tabela[9][12] = Estado.ERRO;        tabela[9][13]= Estado.ERRO;        tabela[9][14] = Estado.ERRO;        tabela[9][15] = Estado.ERRO;        tabela[9][16] = Estado.ERRO;        tabela[9][17] = Estado.ERRO;        tabela[9][18] = Estado.ERRO;        tabela[9][19] = Estado.ERRO;        tabela[9][20] = Estado.ERRO;        tabela[9][21] = Estado.ERRO;        tabela[9][22] = Estado.ERRO;        tabela[9][23] = Estado.ERRO;        tabela[9][24] = Estado.ERRO;
//        tabela[10][0] = Estado.FIM;  tabela[10][1] = Estado.FIM;      tabela[10][2] = Estado.FIM;    tabela[10][3] = Estado.FIM;    tabela[10][4] = Estado.FIM;      tabela[10][5] = Estado.FIM;        tabela[10][6] = Estado.FIM;        tabela[10][7] = Estado.FIM;        tabela[10][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[10][10] = Estado.FIM;        tabela[10][11] = Estado.FIM;        tabela[10][12] = Estado.FIM;        tabela[10][13]= Estado.FIM;        tabela[10][14] = Estado.FIM;        tabela[10][15] = Estado.FIM;        tabela[10][16] = Estado.FIM;        tabela[10][17] = Estado.FIM;        tabela[10][18] = Estado.FIM;        tabela[10][19] = Estado.FIM;        tabela[10][20] = Estado.FIM;        tabela[10][21] = Estado.FIM;        tabela[10][22] = Estado.FIM;        tabela[10][23] = Estado.FIM;        tabela[10][24] = Estado.ERRO;
//        tabela[11][0] = Estado.FIM;  tabela[11][1] = Estado.FIM;      tabela[11][2] = Estado.FIM;    tabela[11][3] = Estado.FIM;    tabela[11][4] = Estado.FIM;      tabela[11][5] = Estado.FIM;        tabela[11][6] = Estado.MENORIG;        tabela[11][7] = Estado.FIM;        tabela[11][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[11][10] = Estado.FIM;        tabela[11][11] = Estado.FIM;        tabela[11][12] = Estado.FIM;        tabela[11][13]= Estado.FIM;        tabela[11][14] = Estado.FIM;        tabela[11][15] = Estado.FIM;        tabela[11][16] = Estado.FIM;        tabela[11][17] = Estado.FIM;        tabela[11][18] = Estado.FIM;        tabela[11][19] = Estado.FIM;        tabela[11][20] = Estado.FIM;        tabela[11][21] = Estado.FIM;        tabela[11][22] = Estado.FIM;        tabela[11][23] = Estado.FIM;        tabela[11][24] = Estado.ERRO;
//        tabela[12][0] = Estado.FIM;  tabela[12][1] = Estado.FIM;      tabela[12][2] = Estado.FIM;    tabela[12][3] = Estado.FIM;    tabela[12][4] = Estado.FIM;      tabela[12][5] = Estado.FIM;        tabela[12][6] = Estado.MAIORIG;        tabela[12][7] = Estado.FIM;        tabela[12][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[12][10] = Estado.FIM;        tabela[12][11] = Estado.FIM;        tabela[12][12] = Estado.FIM;        tabela[12][13]= Estado.FIM;        tabela[12][14] = Estado.FIM;        tabela[12][15] = Estado.FIM;        tabela[12][16] = Estado.FIM;        tabela[12][17] = Estado.FIM;        tabela[12][18] = Estado.FIM;        tabela[12][19] = Estado.FIM;        tabela[12][20] = Estado.FIM;        tabela[12][21] = Estado.FIM;        tabela[12][22] = Estado.FIM;        tabela[12][23] = Estado.FIM;        tabela[12][24] = Estado.ERRO;
//        tabela[13][0] = Estado.FIM;  tabela[13][1] = Estado.FIM;      tabela[13][2] = Estado.FIM;    tabela[13][3] = Estado.FIM;    tabela[13][4] = Estado.FIM;      tabela[13][5] = Estado.FIM;        tabela[13][6] = Estado.IGUALD;        tabela[13][7] = Estado.FIM;        tabela[13][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[13][10] = Estado.FIM;        tabela[13][11] = Estado.FIM;        tabela[13][12] = Estado.FIM;        tabela[13][13]= Estado.FIM;        tabela[13][14] = Estado.FIM;        tabela[13][15] = Estado.FIM;        tabela[13][16] = Estado.FIM;        tabela[13][17] = Estado.FIM;        tabela[13][18] = Estado.FIM;        tabela[13][19] = Estado.FIM;        tabela[13][20] = Estado.FIM;        tabela[13][21] = Estado.FIM;        tabela[13][22] = Estado.FIM;        tabela[13][23] = Estado.FIM;        tabela[13][24] = Estado.ERRO;
//        tabela[14][0] = Estado.FIM;  tabela[14][1] = Estado.FIM;      tabela[14][2] = Estado.INCREMEN;    tabela[14][3] = Estado.FIM;    tabela[14][4] = Estado.FIM;      tabela[14][5] = Estado.FIM;        tabela[14][6] = Estado.FIM;        tabela[14][7] = Estado.FIM;        tabela[14][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[14][10] = Estado.FIM;        tabela[14][11] = Estado.FIM;        tabela[14][12] = Estado.FIM;        tabela[14][13]= Estado.FIM;        tabela[14][14] = Estado.FIM;        tabela[14][15] = Estado.FIM;        tabela[14][16] = Estado.FIM;        tabela[14][17] = Estado.FIM;        tabela[14][18] = Estado.FIM;        tabela[14][19] = Estado.FIM;        tabela[14][20] = Estado.FIM;        tabela[14][21] = Estado.FIM;        tabela[14][22] = Estado.FIM;        tabela[14][23] = Estado.FIM;        tabela[14][24] = Estado.ERRO;
//        tabela[15][0] = Estado.ERRO;  tabela[15][1] = Estado.ERRO;      tabela[15][2] = Estado.ERRO;    tabela[15][3] = Estado.ERRO;    tabela[15][4] = Estado.ERRO;      tabela[15][5] = Estado.ERRO;        tabela[15][6] = Estado.DIF;        tabela[15][7] = Estado.ERRO;        tabela[15][8] = Estado.ERRO;        tabela[1][9] = Estado.ERRO;        tabela[15][10] = Estado.ERRO;        tabela[15][11] = Estado.ERRO;        tabela[15][12] = Estado.ERRO;        tabela[15][13]= Estado.ERRO;        tabela[15][14] = Estado.ERRO;        tabela[15][15] = Estado.ERRO;        tabela[15][16] = Estado.ERRO;        tabela[15][17] = Estado.ERRO;        tabela[15][18] = Estado.ERRO;        tabela[15][19] = Estado.ERRO;        tabela[15][20] = Estado.ERRO;        tabela[15][21] = Estado.ERRO;        tabela[15][22] = Estado.ERRO;        tabela[15][23] = Estado.ERRO;        tabela[15][24] = Estado.ERRO;
//        tabela[16][0] = Estado.FIM;  tabela[16][1] = Estado.FIM;      tabela[16][2] = Estado.FIM;    tabela[16][3] = Estado.FIM;    tabela[16][4] = Estado.FIM;      tabela[16][5] = Estado.FIM;        tabela[16][6] = Estado.FIM;        tabela[16][7] = Estado.FIM;        tabela[16][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[16][10] = Estado.FIM;        tabela[16][11] = Estado.FIM;        tabela[16][12] = Estado.FIM;        tabela[16][13]= Estado.FIM;        tabela[16][14] = Estado.FIM;        tabela[16][15] = Estado.FIM;        tabela[16][16] = Estado.FIM;        tabela[16][17] = Estado.FIM;        tabela[16][18] = Estado.FIM;        tabela[16][19] = Estado.FIM;        tabela[16][20] = Estado.FIM;        tabela[16][21] = Estado.FIM;        tabela[16][22] = Estado.FIM;        tabela[16][23] = Estado.FIM;        tabela[16][24] = Estado.ERRO;
//        tabela[17][0] = Estado.FIM;  tabela[17][1] = Estado.FIM;      tabela[17][2] = Estado.FIM;    tabela[17][3] = Estado.FIM;    tabela[17][4] = Estado.FIM;      tabela[17][5] = Estado.FIM;        tabela[17][6] = Estado.FIM;        tabela[17][7] = Estado.FIM;        tabela[17][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[17][10] = Estado.FIM;        tabela[17][11] = Estado.FIM;        tabela[17][12] = Estado.FIM;        tabela[17][13]= Estado.FIM;        tabela[17][14] = Estado.FIM;        tabela[17][15] = Estado.FIM;        tabela[17][16] = Estado.FIM;        tabela[17][17] = Estado.FIM;        tabela[17][18] = Estado.FIM;        tabela[17][19] = Estado.FIM;        tabela[17][20] = Estado.FIM;        tabela[17][21] = Estado.FIM;        tabela[17][22] = Estado.FIM;        tabela[17][23] = Estado.FIM;        tabela[17][24] = Estado.ERRO;
//        tabela[18][0] = Estado.FIM;  tabela[18][1] = Estado.FIM;      tabela[18][2] = Estado.FIM;    tabela[18][3] = Estado.FIM;    tabela[18][4] = Estado.FIM;      tabela[18][5] = Estado.FIM;        tabela[18][6] = Estado.FIM;        tabela[18][7] = Estado.FIM;        tabela[18][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[18][10] = Estado.FIM;        tabela[18][11] = Estado.FIM;        tabela[18][12] = Estado.FIM;        tabela[18][13]= Estado.FIM;        tabela[18][14] = Estado.FIM;        tabela[18][15] = Estado.FIM;        tabela[18][16] = Estado.FIM;        tabela[18][17] = Estado.FIM;        tabela[18][18] = Estado.FIM;        tabela[18][19] = Estado.FIM;        tabela[18][20] = Estado.FIM;        tabela[18][21] = Estado.FIM;        tabela[18][22] = Estado.FIM;        tabela[18][23] = Estado.FIM;        tabela[18][24] = Estado.ERRO;
//        tabela[19][0] = Estado.FIM;  tabela[19][1] = Estado.FIM;      tabela[19][2] = Estado.FIM;    tabela[19][3] = Estado.FIM;    tabela[19][4] = Estado.FIM;      tabela[19][5] = Estado.FIM;        tabela[19][6] = Estado.FIM;        tabela[19][7] = Estado.FIM;        tabela[19][8] = Estado.FIM;        tabela[1][9] = Estado.FIM;        tabela[19][10] = Estado.FIM;        tabela[19][11] = Estado.FIM;        tabela[19][12] = Estado.FIM;        tabela[19][13]= Estado.FIM;        tabela[19][14] = Estado.FIM;        tabela[19][15] = Estado.FIM;        tabela[19][16] = Estado.FIM;        tabela[19][17] = Estado.FIM;        tabela[19][18] = Estado.FIM;        tabela[19][19] = Estado.FIM;        tabela[19][20] = Estado.FIM;        tabela[19][21] = Estado.FIM;        tabela[19][22] = Estado.FIM;        tabela[19][23] = Estado.FIM;        tabela[19][24] = Estado.ERRO;
//        tabela[20][0] = Estado.FIM;  tabela[20][1] = Estado.FIM;      tabela[20][2] = Estado.FIM;    tabela[20][3] = Estado.FIM;    tabela[20][4] = Estado.FIM;      tabela[20][5] = Estado.FIM;        tabela[20][6] = Estado.FIM;        tabela[20][7] = Estado.FIM;        tabela[20][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[20][10] = Estado.FIM;        tabela[20][11] = Estado.FIM;        tabela[20][12] = Estado.FIM;        tabela[20][13]= Estado.FIM;        tabela[20][14] = Estado.FIM;        tabela[20][15] = Estado.FIM;        tabela[20][16] = Estado.FIM;        tabela[20][17] = Estado.FIM;        tabela[20][18] = Estado.FIM;        tabela[20][19] = Estado.FIM;        tabela[20][20] = Estado.FIM;        tabela[20][21] = Estado.FIM;        tabela[20][22] = Estado.FIM;        tabela[20][23] = Estado.FIM;        tabela[20][24] = Estado.ERRO;
//        tabela[21][0] = Estado.FIM;  tabela[21][1] = Estado.FIM;      tabela[21][2] = Estado.FIM;    tabela[21][3] = Estado.FIM;    tabela[21][4] = Estado.FIM;      tabela[21][5] = Estado.FIM;        tabela[21][6] = Estado.FIM;        tabela[21][7] = Estado.FIM;        tabela[21][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[21][10] = Estado.FIM;        tabela[21][11] = Estado.FIM;        tabela[21][12] = Estado.FIM;        tabela[21][13]= Estado.FIM;        tabela[21][14] = Estado.FIM;        tabela[21][15] = Estado.FIM;        tabela[21][16] = Estado.FIM;        tabela[21][17] = Estado.FIM;        tabela[21][18] = Estado.FIM;        tabela[21][19] = Estado.FIM;        tabela[21][20] = Estado.FIM;        tabela[21][21] = Estado.FIM;        tabela[21][22] = Estado.FIM;        tabela[21][23] = Estado.FIM;        tabela[21][24] = Estado.ERRO;
//        tabela[22][0] = Estado.FIM;  tabela[22][1] = Estado.FIM;      tabela[22][2] = Estado.FIM;    tabela[22][3] = Estado.FIM;    tabela[22][4] = Estado.FIM;      tabela[22][5] = Estado.FIM;        tabela[22][6] = Estado.FIM;        tabela[22][7] = Estado.FIM;        tabela[22][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[22][10] = Estado.FIM;        tabela[22][11] = Estado.FIM;        tabela[22][12] = Estado.FIM;        tabela[22][13]= Estado.FIM;        tabela[22][14] = Estado.FIM;        tabela[22][15] = Estado.FIM;        tabela[22][16] = Estado.FIM;        tabela[22][17] = Estado.FIM;        tabela[22][18] = Estado.FIM;        tabela[22][19] = Estado.FIM;        tabela[22][20] = Estado.FIM;        tabela[22][21] = Estado.FIM;        tabela[22][22] = Estado.FIM;        tabela[22][23] = Estado.FIM;        tabela[22][24] = Estado.ERRO;
//        tabela[23][0] = Estado.FIM;  tabela[23][1] = Estado.FIM;      tabela[23][2] = Estado.FIM;    tabela[23][3] = Estado.FIM;    tabela[23][4] = Estado.FIM;      tabela[23][5] = Estado.FIM;        tabela[23][6] = Estado.FIM;        tabela[23][7] = Estado.FIM;        tabela[23][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[23][10] = Estado.FIM;        tabela[23][11] = Estado.FIM;        tabela[23][12] = Estado.FIM;        tabela[23][13]= Estado.FIM;        tabela[23][14] = Estado.FIM;        tabela[23][15] = Estado.FIM;        tabela[23][16] = Estado.FIM;        tabela[23][17] = Estado.FIM;        tabela[23][18] = Estado.FIM;        tabela[23][19] = Estado.FIM;        tabela[23][20] = Estado.FIM;        tabela[23][21] = Estado.FIM;        tabela[23][22] = Estado.FIM;        tabela[23][23] = Estado.FIM;        tabela[23][24] = Estado.ERRO;
//        tabela[24][0] = Estado.FIM;  tabela[24][1] = Estado.FIM;      tabela[24][2] = Estado.FIM;    tabela[24][3] = Estado.FIM;    tabela[24][4] = Estado.FIM;      tabela[24][5] = Estado.FIM;        tabela[24][6] = Estado.FIM;        tabela[24][7] = Estado.FIM;        tabela[24][8] = Estado.FIM;        tabela[2][9] = Estado.FIM;        tabela[24][10] = Estado.FIM;        tabela[24][11] = Estado.FIM;        tabela[24][12] = Estado.FIM;        tabela[24][13]= Estado.FIM;        tabela[24][14] = Estado.FIM;        tabela[24][15] = Estado.FIM;        tabela[24][16] = Estado.FIM;        tabela[24][17] = Estado.FIM;        tabela[24][18] = Estado.FIM;        tabela[24][19] = Estado.FIM;        tabela[24][20] = Estado.FIM;        tabela[24][21] = Estado.FIM;        tabela[24][22] = Estado.FIM;        tabela[24][23] = Estado.FIM;        tabela[24][24] = Estado.ERRO;
//        tabela[25][0] = Estado.COMENTL;  tabela[25][1] = Estado.COMENTL;      tabela[25][2] = Estado.COMENTL;    tabela[25][3] = Estado.COMENTL;    tabela[25][4] = Estado.COMENTL;      tabela[25][5] = Estado.COMENTL;        tabela[25][6] = Estado.COMENTL;        tabela[25][7] = Estado.COMENTL;        tabela[25][8] = Estado.COMENTL;        tabela[2][9] = Estado.COMENTL;        tabela[25][10] = Estado.COMENTL;        tabela[25][11] = Estado.COMENTL;        tabela[25][12] = Estado.COMENTL;        tabela[25][13]= Estado.COMENTL;        tabela[25][14] = Estado.COMENTL;        tabela[25][15] = Estado.COMENTL;        tabela[25][16] = Estado.COMENTL;        tabela[25][17] = Estado.COMENTL;        tabela[25][18] = Estado.COMENTL;        tabela[25][19] = Estado.COMENTL;        tabela[25][20] = Estado.COMENTL;        tabela[25][21] = Estado.FIM;        tabela[25][22] = Estado.COMENTL;        tabela[25][23] = Estado.FIM;        tabela[25][24] = Estado.ERRO;
//        tabela[26][0] = Estado.COMENTB;  tabela[26][1] = Estado.COMENTB;      tabela[26][2] = Estado.COMENTB;    tabela[26][3] = Estado.COMENTB;    tabela[26][4] = Estado.COMENTB;      tabela[26][5] = Estado.COMENTB;        tabela[26][6] = Estado.COMENTB;        tabela[26][7] = Estado.COMENTB;        tabela[26][8] = Estado.COMENTB;        tabela[26][9] = Estado.COMENTB;        tabela[26][10] = Estado.COMENTB;        tabela[26][11] = Estado.COMENTB;        tabela[26][12] = Estado.COMENTB;        tabela[26][13]= Estado.COMENTB;        tabela[26][14] = Estado.COMENTB;        tabela[26][15] = Estado.COMENTB;        tabela[26][16] = Estado.COMENTB;        tabela[26][17] = Estado.COMENTB;        tabela[26][18] = Estado.COMENTB;        tabela[26][19] = Estado.COMENTB;        tabela[26][20] = Estado.COMENTB;        tabela[26][21] = Estado.COMENTB;        tabela[26][22] = Estado.COMENTB;        tabela[26][23] = Estado.COMENTB;        tabela[26][24] = Estado.ERRO;
//        tabela[27][0] = Estado.FIM;  tabela[27][1] = Estado.FIM;      tabela[27][2] = Estado.FIM;    tabela[27][3] = Estado.FIM;    tabela[27][4] = Estado.FIM;      tabela[27][5] = Estado.FIM;        tabela[27][6] = Estado.FIM;        tabela[27][7] = Estado.FIM;        tabela[27][8] = Estado.FIM;        tabela[27][9] = Estado.FIM;        tabela[27][10] = Estado.FIM;        tabela[27][11] = Estado.FIM;        tabela[27][12] = Estado.FIM;        tabela[27][13]= Estado.FIM;        tabela[27][14] = Estado.FIM;        tabela[27][15] = Estado.FIM;        tabela[27][16] = Estado.FIM;        tabela[27][17] = Estado.FIM;        tabela[27][18] = Estado.FIM;        tabela[27][19] = Estado.FIM;        tabela[27][20] = Estado.FIM;        tabela[27][21] = Estado.FIM;        tabela[27][22] = Estado.FIM;        tabela[27][23] = Estado.FIM;        tabela[27][24] = Estado.ERRO;
//        tabela[28][0] = Estado.FIM;  tabela[28][1] = Estado.FIM;      tabela[28][2] = Estado.FIM;    tabela[28][3] = Estado.FIM;    tabela[28][4] = Estado.FIM;      tabela[28][5] = Estado.FIM;        tabela[28][6] = Estado.FIM;        tabela[28][7] = Estado.FIM;        tabela[28][8] = Estado.FIM;        tabela[28][9] = Estado.FIM;        tabela[28][10] = Estado.FIM;        tabela[28][11] = Estado.FIM;        tabela[28][12] = Estado.FIM;        tabela[28][13]= Estado.FIM;        tabela[28][14] = Estado.FIM;        tabela[28][15] = Estado.FIM;        tabela[28][16] = Estado.FIM;        tabela[28][17] = Estado.FIM;        tabela[28][18] = Estado.FIM;        tabela[28][19] = Estado.FIM;        tabela[28][20] = Estado.FIM;        tabela[28][21] = Estado.FIM;        tabela[28][22] = Estado.FIM;        tabela[28][23] = Estado.FIM;        tabela[28][24] = Estado.ERRO;
//        tabela[29][0] = Estado.FIM;  tabela[29][1] = Estado.FIM;      tabela[29][2] = Estado.FIM;    tabela[29][3] = Estado.FIM;    tabela[29][4] = Estado.FIM;      tabela[29][5] = Estado.FIM;        tabela[29][6] = Estado.FIM;        tabela[29][7] = Estado.FIM;        tabela[29][8] = Estado.FIM;        tabela[29][9] = Estado.FIM;        tabela[29][10] = Estado.FIM;        tabela[29][11] = Estado.FIM;        tabela[29][12] = Estado.FIM;        tabela[29][13]= Estado.FIM;        tabela[29][14] = Estado.FIM;        tabela[29][15] = Estado.FIM;        tabela[29][16] = Estado.FIM;        tabela[29][17] = Estado.FIM;        tabela[29][18] = Estado.FIM;        tabela[29][19] = Estado.FIM;        tabela[29][20] = Estado.FIM;        tabela[29][21] = Estado.FIM;        tabela[29][22] = Estado.FIM;        tabela[29][23] = Estado.FIM;        tabela[29][24] = Estado.ERRO;
//        tabela[30][0] = Estado.FIM;  tabela[30][1] = Estado.FIM;      tabela[30][2] = Estado.FIM;    tabela[30][3] = Estado.FIM;    tabela[30][4] = Estado.FIM;      tabela[30][5] = Estado.FIM;        tabela[30][6] = Estado.FIM;        tabela[30][7] = Estado.FIM;        tabela[30][8] = Estado.FIM;        tabela[30][9] = Estado.FIM;        tabela[30][10] = Estado.FIM;        tabela[30][11] = Estado.FIM;        tabela[30][12] = Estado.FIM;        tabela[30][13]= Estado.FIM;        tabela[30][14] = Estado.FIM;        tabela[30][15] = Estado.FIM;        tabela[30][16] = Estado.FIM;        tabela[30][17] = Estado.FIM;        tabela[30][18] = Estado.FIM;        tabela[30][19] = Estado.FIM;        tabela[30][20] = Estado.FIM;        tabela[30][21] = Estado.FIM;        tabela[30][22] = Estado.FIM;        tabela[30][23] = Estado.FIM;        tabela[30][24] = Estado.ERRO;
//        tabela[31][0] = Estado.FIM;  tabela[31][1] = Estado.FIM;      tabela[31][2] = Estado.FIM;    tabela[31][3] = Estado.FIM;    tabela[31][4] = Estado.FIM;      tabela[31][5] = Estado.FIM;        tabela[31][6] = Estado.FIM;        tabela[31][7] = Estado.FIM;        tabela[31][8] = Estado.FIM;        tabela[31][9] = Estado.FIM;        tabela[31][10] = Estado.FIM;        tabela[31][11] = Estado.FIM;        tabela[31][12] = Estado.FIM;        tabela[31][13]= Estado.FIM;        tabela[31][14] = Estado.FIM;        tabela[31][15] = Estado.FIM;        tabela[31][16] = Estado.FIM;        tabela[31][17] = Estado.FIM;        tabela[31][18] = Estado.FIM;        tabela[31][19] = Estado.FIM;        tabela[31][20] = Estado.FIM;        tabela[31][21] = Estado.FIM;        tabela[31][22] = Estado.FIM;        tabela[31][23] = Estado.FIM;        tabela[31][24] = Estado.ERRO;
//        tabela[32][0] = Estado.FIM;  tabela[32][1] = Estado.FIM;      tabela[32][2] = Estado.FIM;    tabela[32][3] = Estado.FIM;    tabela[32][4] = Estado.FIM;      tabela[32][5] = Estado.FIM;        tabela[32][6] = Estado.FIM;        tabela[32][7] = Estado.FIM;        tabela[32][8] = Estado.FIM;        tabela[32][9] = Estado.FIM;        tabela[32][10] = Estado.FIM;        tabela[32][11] = Estado.FIM;        tabela[32][12] = Estado.FIM;        tabela[32][13]= Estado.FIM;        tabela[32][14] = Estado.FIM;        tabela[32][15] = Estado.FIM;        tabela[32][16] = Estado.FIM;        tabela[32][17] = Estado.FIM;        tabela[32][18] = Estado.FIM;        tabela[32][19] = Estado.FIM;        tabela[32][20] = Estado.FIM;        tabela[32][21] = Estado.FIM;        tabela[32][22] = Estado.FIM;        tabela[32][23] = Estado.FIM;        tabela[32][24] = Estado.ERRO;
//        tabela[33][0] = Estado.COMENTB;  tabela[33][1] = Estado.COMENTB;      tabela[33][2] = Estado.COMENTB;    tabela[33][3] = Estado.COMENTB;    tabela[33][4] = Estado.FIM;      tabela[33][5] = Estado.PFIM;        tabela[33][6] = Estado.COMENTB;        tabela[33][7] = Estado.COMENTB;        tabela[33][8] = Estado.COMENTB;        tabela[33][9] = Estado.COMENTB;        tabela[33][10] = Estado.COMENTB;        tabela[33][11] = Estado.COMENTB;        tabela[33][12] = Estado.COMENTB;        tabela[33][13]= Estado.COMENTB;        tabela[33][14] = Estado.COMENTB;        tabela[33][15] = Estado.COMENTB;        tabela[33][16] = Estado.COMENTB;        tabela[33][17] = Estado.COMENTB;        tabela[33][18] = Estado.COMENTB;        tabela[33][19] = Estado.COMENTB;        tabela[33][20] = Estado.COMENTB;        tabela[33][21] = Estado.COMENTB;        tabela[33][22] = Estado.COMENTB;        tabela[33][23] = Estado.COMENTB;        tabela[33][24] = Estado.ERRO;
//        tabela[34][0] = Estado.FIM;  tabela[34][1] = Estado.FIM;      tabela[34][2] = Estado.FIM;    tabela[34][3] = Estado.FIM;    tabela[34][4] = Estado.FIM;      tabela[34][5] = Estado.FIM;        tabela[34][6] = Estado.FIM;        tabela[34][7] = Estado.FIM;        tabela[34][8] = Estado.FIM;        tabela[34][9] = Estado.FIM;        tabela[34][10] = Estado.FIM;        tabela[34][11] = Estado.FIM;        tabela[34][12] = Estado.FIM;        tabela[34][13]= Estado.FIM;        tabela[34][14] = Estado.FIM;        tabela[34][15] = Estado.FIM;        tabela[34][16] = Estado.FIM;        tabela[34][17] = Estado.FIM;        tabela[34][18] = Estado.FIM;        tabela[34][19] = Estado.FIM;        tabela[34][20] = Estado.FIM;        tabela[34][21] = Estado.FIM;        tabela[34][22] = Estado.FIM;        tabela[34][23] = Estado.FIM;        tabela[34][24] = Estado.ERRO;
//        tabela[35][0] = Estado.ERRO;  tabela[35][1] = Estado.ERRO;      tabela[35][2] = Estado.ERRO;    tabela[35][3] = Estado.ERRO;    tabela[35][4] = Estado.ERRO;      tabela[35][5] = Estado.ERRO;        tabela[35][6] = Estado.ERRO;        tabela[35][7] = Estado.ERRO;        tabela[35][8] = Estado.ERRO;        tabela[35][9] = Estado.ERRO;        tabela[35][10] = Estado.ERRO;        tabela[35][11] = Estado.ERRO;        tabela[35][12] = Estado.ERRO;        tabela[35][13]= Estado.ERRO;        tabela[35][14] = Estado.ERRO;        tabela[35][15] = Estado.ERRO;        tabela[35][16] = Estado.ERRO;        tabela[35][17] = Estado.ERRO;        tabela[35][18] = Estado.ERRO;        tabela[35][19] = Estado.ERRO;        tabela[35][20] = Estado.ERRO;        tabela[35][21] = Estado.ERRO;        tabela[35][22] = Estado.ERRO;        tabela[35][23] = Estado.ERRO;        tabela[35][24] = Estado.ERRO;

//        for(int i=1;i<35;i++){
//            tabela[i][25] = Estado.FIM;
//        }
//
//        tabela[0][25] = Estado.FIMTEXTO;


    }

    protected void inicializaVetorErros(){

        vetorErros=new String[Estado.values().length];
        for(int i=0;i<Estado.values().length;i++){//inicializa o vetor que identifica os erros com "Caracter Invalido"
            vetorErros[i]="Caracter Inválido";

        }

        //atribui os outros tipos erros nas posições correspondentes
        vetorErros[Estado.IDENT.ordinal()]      = "Identificador Inválido";
        vetorErros[Estado.NUM.ordinal()]        = "Numero Inválido";
        vetorErros[Estado.NUMDECIM.ordinal()]   = "Numero Inválido";
        vetorErros[Estado.E.ordinal()]          = "Operador Inválido";
        vetorErros[Estado.OU.ordinal()]         = "Operador Inválido";
        vetorErros[Estado.EXCL.ordinal()]       = "Operador Inválido";
        vetorErros[Estado.COMENTB.ordinal()]    = "Comentário não Finalizado";



    }

//    public static void main(String[] args){
//
//        Scanner s = Scanner.getScanner();
//        String texto = "dsdf \n d gh a";
//        s.setTexto(texto);
//        Automato automato = new Automato();
//        while(true){
//
//            Palavra p= automato.proximoToken();
//            Token t = null;
//
//            if(p instanceof Token){
//              t = (Token)  p;
//                System.out.println(t.getTipo());
//              System.out.println(t.getLexema());
//            }
//
//
//        }
//
//
//    }

}
